<?php
	/**
	  * @package	MyTools
	  * @name		BBCodeGenerator
	  * @brief		Clase para reemplazar BBCode por HTML Tags
	  * @author		Hermann D. Schimpf <hschimpf@gschimpf.com>
	  * @license	http://opensource.org/licenses/gpl-2.0.php
	  * @date		2010-01-04
	  * @version	0.1.4
  	**/

	final class BBCodeGenerator extends MyDebuger implements MyVersions {
		/* version de la clase */
		private static $version			= 0;
		/* subversion de la clase */
		private static $subversion		= 1;
		/* numero de revision de la clase */
		private static $revision		= 4;

		/* expresiones regulares para buscar BBCode */
		private static $bbCodeFindExpresion		= Array(
			'bold'		=> '#\[b\](.*?)\[/b\]#is',
			'italic'		=> '#\[i\](.*?)\[/i\]#is',
			'underline'	=> '#\[u\](.*?)\[/u\]#is',
			'linkTitle'	=> '#\[url=(.*?)](.*?)\[/url\]#i',
			'linkBasic'	=> '#\[url](.*?)\[/url\]#i',
			'color'		=> '#\[color=(red|green|blue|yellow)\](.*?)\[/color\]#is'
		);
		/* expresiones regulares para buscar BBCode */
		private static $bbCodeReplaceExpresion	= Array(
			'bold'		=> '<b>$1</b>',
			'italic'		=> '<i>$1</i>',
			'underline'	=> '<u>$1</u>',
			'linkTitle'	=> '<a href="$1">$2</a>',
			'linkBasic'	=> '<a href="$1">$1</a>',
			'color'		=> '<font style=\'color:$1;\'>$2</font>'
		);

		public function __construct($debug = False) {
			/* creamos el padre */
			parent::__construct($debug, __CLASS__);
		}

		public static final function getVersion() {
			/* retornamos la version actual de la clase */
			return 'v' . self::$version . '.' . self::$subversion . '.' . self::$revision;
		}

		public static final function replaceBBCode($string = Null, $debug = False) {
			try {
				try {
					/* creamos la instancia */
					$replaceBBCode = new BBCodeGenerator($debug);
					/* mostramos un mensaje */
					$replaceBBCode->show('Verificando cadena con BBCode..', False);
					/* verificamos si ingreso algo */
					if ($string === Null)
						/* salimos con una excepcion */
						$replaceBBCode->newException('No se especifico la cadena a reemplazar');
					/* verificamos que la cadena sea un string */
					if (gettype($string) != 'string')
						/* salimos con una excepcion */
						$replaceBBCode->newException('La cadena a reemplazar debe ser un string');
					/* mostramos ok al mensaje */
					$replaceBBCode->showOK();
					/* mostramos la cadena */
					$replaceBBCode->show('Cadena a reemplazar:');
					$replaceBBCode->show($string);
					/* retornamos la cadena reemplazada */
					return preg_replace(self::$bbCodeFindExpresion, self::$bbCodeReplaceExpresion, $string);
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$replaceBBCode->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$replaceBBCode->show($e->getMensaje());
			}
		}
	}
?>